/**
 * CSV导出工具
 */

/**
 * 导出CSV文件
 * @param {Blob} blob CSV数据blob
 * @param {string} filename 文件名
 */
export function downloadCSVBlob(blob, filename) {
  // 创建下载链接
  const url = window.URL.createObjectURL(blob)
  const link = document.createElement('a')
  link.href = url
  link.download = filename
  
  // 触发下载
  document.body.appendChild(link)
  link.click()
  
  // 清理
  document.body.removeChild(link)
  window.URL.revokeObjectURL(url)
}

/**
 * 处理CSV导出响应
 * @param {Response} response 响应对象
 * @param {string} defaultFilename 默认文件名
 */
export function handleCSVExportResponse(response, defaultFilename = 'export.csv') {
  try {
    console.log('🔍 开始处理CSV响应:', {
      hasResponse: !!response,
      responseType: typeof response,
      dataType: response?.data ? typeof response.data : 'no data',
      dataConstructor: response?.data ? response.data.constructor.name : 'no data',
      status: response?.status,
      headers: response?.headers
    })

    // 检查响应是否有效
    if (!response) {
      throw new Error('响应对象为空')
    }

    // 检查是否是错误响应（JSON格式）
    if (response.data && typeof response.data === 'object' && response.data.code !== undefined) {
      // 这是一个API错误响应，不是文件响应
      console.error('❌ API错误响应:', response.data)
      throw new Error(response.data.message || '导出失败')
    }

    // 处理响应数据 - 支持Blob和字符串两种格式
    let blob
    if (response.data instanceof Blob) {
      console.log('📦 处理Blob数据:', {
        type: response.data.type,
        size: response.data.size
      })
      blob = response.data
    } else if (typeof response.data === 'string') {
      // 如果返回的是字符串格式的CSV，转换为Blob
      console.log('📝 处理字符串数据，长度:', response.data.length)
      blob = new Blob([response.data], { type: 'text/csv;charset=utf-8' })
    } else {
      console.error('❌ 不支持的数据格式:', {
        dataType: typeof response.data,
        constructor: response.data?.constructor?.name,
        sample: response.data ? String(response.data).substring(0, 100) : 'null'
      })
      throw new Error('响应数据格式错误，期望Blob或CSV字符串格式')
    }
    
    // 从响应头获取文件名
    let filename = defaultFilename
    
    // 安全地访问响应头
    const headers = response.headers || {}
    console.log('🏷️ 响应头信息:', {
      hasHeaders: !!headers,
      headerKeys: Object.keys(headers),
      contentType: headers['content-type'] || headers['Content-Type'],
      contentDisposition: headers['content-disposition'] || headers['Content-Disposition']
    })
    
    const contentDisposition = headers['content-disposition'] || headers['Content-Disposition']
    
    if (contentDisposition) {
      console.log('📄 Content-Disposition:', contentDisposition)
      const filenameMatch = contentDisposition.match(/filename[*]?="?([^"]+)"?/)
      if (filenameMatch) {
        try {
          filename = decodeURIComponent(filenameMatch[1])
          console.log('✅ 从响应头提取文件名:', filename)
        } catch (e) {
          // 解码失败，使用原文件名
          filename = filenameMatch[1]
          console.log('⚠️ 文件名解码失败，使用原始:', filename)
        }
      }
    } else {
      console.log('ℹ️ 未找到Content-Disposition，使用默认文件名')
    }
    
    // 如果没有获取到文件名，使用带时间戳的默认文件名
    if (filename === defaultFilename) {
      const timestamp = new Date().toISOString().slice(0, 19).replace(/[:T]/g, '_')
      filename = `${defaultFilename.replace('.csv', '')}_${timestamp}.csv`
    }
    
    // 下载文件
    console.log('📥 开始下载文件:', {
      filename,
      blobSize: blob.size,
      blobType: blob.type
    })
    downloadCSVBlob(blob, filename)
    
    console.log('✅ CSV导出处理完成')
    return {
      success: true,
      filename
    }
  } catch (error) {
    console.error('CSV导出失败:', error)
    return {
      success: false,
      error: error.message
    }
  }
}